package com.tensquare.article.controller;

import com.tensquare.article.pojo.Article;
import com.tensquare.article.service.ArticleService;
import com.tensquare.entity.PageResult;
import com.tensquare.entity.Result;
import com.tensquare.entity.StatusCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/article")
@CrossOrigin // 允许跨域访问
public class ArticleController {

    @Autowired
    private ArticleService articleService;

    //@RequestMapping(method = RequestMethod.POST)

    /**
     * 添加文章
     * @param article
     * @return
     */
    @PostMapping
    public Result add(@RequestBody Article article){
        //调用业务实现添加
        articleService.add(article);
        // 返回操作的结果
        return new Result(true, StatusCode.OK,"添加成功");
    }

    /**
     * 通过编号查询文章信息
     */
    @GetMapping("/{articleId}")
    public Result findById(@PathVariable String articleId){
        // 调用业务查询
        Article article = articleService.findById(articleId);
        //int a = 1/0;
        //返回结果
        return new Result(true, StatusCode.OK, "查询成功", article);
    }

    /**
     * 查询所有
     * @return
     */
    @GetMapping()
    public Result findAll(){
        // 调用业务查询所有
        List<Article> list = articleService.findAll();
        // 返回
        return new Result(true, StatusCode.OK, "查询成功", list);
    }


    /**
     * /{articleId}
     * 修改文章
     */
    @PutMapping("/{articleId}")
    public Result update(@PathVariable String articleId, @RequestBody Article article){
        // 设置文章的id
        article.setId(articleId);
        // 调用业务更新
        articleService.update(article);
        // 返回结果
        return new Result(true, StatusCode.OK, "更新成功");
    }

    /**
     * {articleId}
     * 根据ID删除文章
     */
    @DeleteMapping("/{articleId}")
    public Result deleteById(@PathVariable String articleId){
        // 调用业务删除, 此处需要注意：实际工作中执行的是逻辑删除（即update状态为不可用），不删除实际数据
        articleService.deleteById(articleId);
        // 返回结果
        return new Result(true, StatusCode.OK, "删除成功");
    }

    /**
     * /search/{page}/{size}
     文章分页
     */
    @PostMapping("/search/{page}/{size}")
    public Result findPage(@RequestBody Article article, @PathVariable int page, @PathVariable int size){
        // 调用业务分页条件查询, total, rows
        PageResult<Article> pageResult = articleService.findPage(page,size, article);
        // 返回结果
        return new Result(true, StatusCode.OK,"查询成功", pageResult);
    }

    /**
     * 通过文章id订单作者
     * @param userId 是为了测试，开发中，用户id为登陆用户的id,应该由token获取
     */
    @PutMapping("/subscribe/{articleId}")
    public Result subscribe(@PathVariable String articleId, @RequestParam String userId){
        // 调用业务执行订阅，结果两种：
        boolean flag = articleService.substribe(articleId, userId);
        //1: 订阅成功
        if(flag){
            return new Result(true, StatusCode.OK,"订阅成功");
        }
        //2: 取消订阅
        return new Result(true, StatusCode.OK,"取消订阅成功");
    }

    /**
     * 文章点赞
     * @param userId 是为了测试，开发中，用户id为登陆用户的id,应该由token获取
     */
    @PutMapping("/thumbup/{articleId}")
    public Result thumbup(@PathVariable String articleId, @RequestParam String userId){
        // 调用业务点赞
        articleService.thumbup(articleId, userId);
        return new Result(true, StatusCode.OK,"点赞成功");
    }

}
